package com.dys.datastructuresandalgorithm.printbinary;

/**
 * @className: com.dys.datastructuresandalgorithm.printbinary.PrintB
 * @description: 打印二进制
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/05/16 下午9:23
 */
public class PrintB {

    public static void main(String[] args) {

        // int 4个字节=32位
        // int num = 3;
        // printBinary(num);
        // int test =1;
        // 1向左移动4位，右侧拿0来补
        // printBinary(test<<4);

        // 整型最大值 留着最高位：整型既可以表示正也可以表示负
        // int i = Integer.MAX_VALUE;
        // System.out.println(i);
        // printBinary(-1);

        // 最小值
        // int minValue = Integer.MIN_VALUE;
        // System.out.println(minValue);
        // 与取反加1有关：原码、反码、补码
        // printBinary(minValue);

        // 取反
        // int b=123456789;
        // int c=~b;
        // printBinary(b);
        // printBinary(c);

        // int a = 1234567890;
        // int b = 84345953;
        // printBinary(a);
        // printBinary(b);
        // System.out.println("==============");
        // printBinary(a | b);
        // printBinary(a & b);
        // printBinary(a ^ b);

        // int a = 1024;
        // int a = Integer.MIN_VALUE;
        // printBinary(a);
        // 拿符号位来补:带符号位右移
        // printBinary(a>>1);
        // 不带符号位右移
        // printBinary(a>>>1);

        // 相反数
        // int c = 5;
        int c = Integer.MIN_VALUE;
        int d = -c;
        // 负号也可以这么表达
        d = (~c + 1);
        System.out.println(c);
        System.out.println(d);
        long l = 12345678909874L;
        print(l);
    }

    public static void printBinary(int num) {
        for (int i = 31; i >= 0; i--) {
            // 提取出一个整数的二进制状态 &:两个数相遇才能出1 1向左移动i位，左移不带符号
            System.out.print((num & (1 << i)) == 0 ? "0" : "1");
        }
        System.out.println();
    }

    public static void print(long num) {
        for (int i = 31; i >= 0; i--) {
            // 提取出一个整数的二进制状态 &:两个数相遇才能出1 1向左移动i位，左移不带符号
            System.out.print((num & (1L << i)) == 0 ? "0" : "1");
        }
        System.out.println();
    }
}
